﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Interfaces;
using HerGoS.Administration.Entities;
using HerGoS.Viaticos.Entities.Interfaces;

namespace HerGoS.Viaticos.Entities
{
    [Serializable]
    public class Solicitud : ViaticosBaseClass, ITramos, IViaticosPrototype
    {
        #region Construction
        public Solicitud()
		{
            Initializer();
        }
        private void Initializer()
        {
            Tramos = new List<Tramo>();
        }
		#endregion

		#region DataMembers

        private int _Numero;
        private DateTime? _FechaSolicitud;
        private string _Mail;
        private string _Motivo;
        private string _EventoNombre;
        private DateTime? _FechaEvento;
        private bool _SolicitaViaticos;
        protected List<Tramo> _Tramos;
        
     

		#endregion

		#region Properties
        
		public int Numero {
            get { return _Numero; }
            set { this._Numero = value; }
		}

        public DateTime? FechaSolicitud
        {
            get { return _FechaSolicitud; }
            set { this._FechaSolicitud = value; }
		}

        public Distancia Distancia
        {
            get { return _Distancia; }
            set { _Distancia = value; }
        }

        public Entidad Entidad
        {
            get { return _Entidad; }
            set { this._Entidad = value; }
        }

        public Area Area
        {
            get { return _Area; }
            set { this._Area = value; }
        }

        public Persona Persona
        {
            get { return _Persona; }
            set { this._Persona = value; }
        
        }
      
        public string Mail
        {
            get { return _Mail; }
            set { _Mail = value; }
        }

        public DateTime? FechaSalida
        {
            get { return _FechaSalida; }
            set { _FechaSalida = value; }
        }

        public DateTime? FechaRetorno
        {
            get { return _FechaRetorno; }
            set { _FechaRetorno = value; }
        }
        public string Observaciones
        {
            get { return _Observaciones; }
            set { _Observaciones = value; }
        }

        public string EventoNombre
        {
            get { return _EventoNombre; }
            set { _EventoNombre = value; }
        }
        
        public DateTime? FechaEvento
        {
            get { return _FechaEvento; }
            set { _FechaEvento = value; }
        }

        public string Motivo
        { 
          get { return _Motivo; }
          set { _Motivo = value; }
        }

        public List<Tramo> Tramos
        {
            get
            {
                return _Tramos;
            }
            set
            {
                _Tramos = value;
            }
        }

        

        public bool SolicitaViaticos
        {
            get { return this._SolicitaViaticos; }
            set { _SolicitaViaticos = value; }
        }
        

		#endregion
		
		#region Overrides
		/// <summary>
		/// Returns the string of the object.
		/// </summary>
		/// <returns>String</returns>
		public override String ToString()
		{
			return this.Numero.ToString();
		}

		#endregion

        #region IViaticosPrototype Members

        public List<Tramo> Clone()
        {
            return Tramos.Select(x => new Tramo
            {
                Persistencia = EstadoPersistencia.INSERT,
                CiudadOrigen = x.CiudadOrigen,
                NroServicioOrigen = x.NroServicioOrigen,
                CodigoOrigen = x.CodigoOrigen,
                FechaOrigen = x.FechaOrigen,
                MontoTerminalOrigenIda = x.MontoTerminalOrigenIda,
                MontoTerminalOrigenVuelta = x.MontoTerminalOrigenVuelta,
                ObservacionOrigen = x.ObservacionOrigen,
                CiudadDestino = x.CiudadDestino,
                NroServicioDestino = x.NroServicioDestino,
                CodigoDestino = x.CodigoDestino,
                FechaDestino = x.FechaDestino,
                MontoTerminalDestinoIda = x.MontoTerminalDestinoIda,
                MontoTerminalDestinoVuelta = x.MontoTerminalDestinoVuelta,
                ObservacionDestino = x.ObservacionDestino,
                Transporte = x.Transporte,
                TarifaDiariaDestino = x.TarifaDiariaDestino,
                DiasViaticos = x.DiasViaticos,
                PorcentajeViatico = x.PorcentajeViatico,
                PorcentajeAplicacion = x.PorcentajeAplicacion,
                OID = x.OID,
                Activo = x.Activo,
                kmRecorridos= x.kmRecorridos

            }
            ).ToList<Tramo>();
        }

        #endregion
       
    }
}
